package strategy.com.ibeifeng;

/**
 * 它的优点有：
 * 
 * 1. 策略模式提供了管理相关的算法族的办法。策略类的等级结构定 义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类 里面，从而避免重复的代码。
 * 
 * 2. 策略模式提供了可以替换继承关系的办法。继承可以处理多种算 法或行为。如果不是用策略模式，那么使用算法或行为的环境类就
 * 可能会有一些子类，每一个子类提供一个不同的算法或行为。但 是，这样一来算法或行为的使用者就和算法或行为本身混在一起。
 * 决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻 辑混合在一起，从而不可能再独立演化。继承使得动态改变算法或 行为变得不可能。
 * 
 * 3. 使用策略模式可以避免使用多重条件转移语句。多重转移语句不 易维护，它把采取哪一种算法或采取哪一种行为的逻辑与算法或行
 * 为的逻辑混合在一起，统统列在一个多重转移语句里面，比使用继承的办 法还要原始和落后。
 * 
 * 策略模式的缺点有：
 * 
 * 1. 客户端必须知道所有的策略类，并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别，以便适时选择恰当的算法类。换言之，
 * 策略模式只适用于客户端知道所有的算法或行为的情况。
 * 
 * 2. 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面，而将策略类设计成可共享的，这样策略类实例可以被不同客户端使用。换言之，
 * 可以使用享元模式来减少对象的数量。
 * 
 * 
 * @author Jin
 *
 */
public class MainClass {

	public static void main(String[] args) {
		double num = 200;
		Context context = new Context(new StrategyB());
		double newNum = context.cost(num);
		System.out.println("实际付账" + newNum + "元");
	}
}
